
// 小程序入口文件
App({
  globalData: {
    userInfo: null,
    location: null,
    settings: {
      region: ['浙江省', '杭州市', '上城区', '丁兰街道'],
      range: 1, // 默认1km
      visibility: {
        province: false,
        city: false,
        district: true,
        street: true
      },
      message: '老乡见老乡，两眼泪汪汪！'
    }
  },
  
  onLaunch() {
    // ⚠️ 开发测试：清空所有本地存储（发布前请删除或注释此行）
    wx.clearStorageSync()
    console.log('✅ 本地存储已清空，恢复到初始状态！')
    // ============================================
    
    // 初始化全局数据
    this.initGlobalData()
    // 获取位置信息（不依赖登录状态）
    this.getLocation()
  },
  
  // 初始化全局数据
  initGlobalData() {
    // 从本地存储加载设置
    const settings = wx.getStorageSync('settings')
    if (settings) {
      this.globalData.settings = settings
    } else {
      // 设置默认值
      this.globalData.settings = {
        region: ['浙江省', '杭州市', '上城区', '丁兰街道'],
        range: 1,
        visibility: {
          province: false,
          city: false,
          district: true,
          street: true
        },
        message: '老乡见老乡，两眼泪汪汪！'
      }
      wx.setStorageSync('settings', this.globalData.settings)
    }
    
    // 从本地存储加载用户信息
    const userInfo = wx.getStorageSync('userInfo')
    if (userInfo) {
      this.globalData.userInfo = userInfo
    }
  },
  
  getLocation() {
    wx.getLocation({
      type: 'gcj02',
      success: res => {
        this.globalData.location = {
          latitude: res.latitude,
          longitude: res.longitude
        }
        // 触发位置就绪事件
        this.emit('locationReady')
      },
      fail: err => {
        console.error('获取位置失败', err)
        // 设置默认位置
        this.globalData.location = {
          latitude: 39.9042,
          longitude: 116.4074
        }
        this.emit('locationReady')
      }
    })
  },
  
  // 检查登录状态
  checkLogin() {
    const token = wx.getStorageSync('token')
    if (token) {
      this.globalData.userInfo = wx.getStorageSync('userInfo')
      return true
    }
    return false
  },
  
  // 带超时的位置获取
  getLocationWithTimeout() {
    // 设置超时时间（10秒）
    const timeout = 10000
    const timer = setTimeout(() => {
      this.handleLocationFail('获取位置超时')
    }, timeout)
    
    wx.getLocation({
      type: 'gcj02',
      success: res => {
        clearTimeout(timer)
        this.globalData.location = {
          latitude: res.latitude,
          longitude: res.longitude
        }
        // 触发位置就绪事件
        this.emit('locationReady')
      },
      fail: err => {
        clearTimeout(timer)
        this.handleLocationFail('获取位置失败')
      }
    })
  },
  
  // 处理位置获取失败
  handleLocationFail(message) {
    console.error(message)
    // 设置默认位置（北京）
    this.globalData.location = {
      latitude: 39.9042,
      longitude: 116.4074
    }
    // 触发事件通知页面
    this.emit('locationReady')
  },
  
  // 用户登录方法
  userLogin(callback) {
    if (!this.globalData.location) {
      this.getLocationWithTimeout()
    }
    
    wx.getUserProfile({
      desc: '用于展示你的头像和昵称',
      success: res => {
        const userInfo = res.userInfo
        wx.login({
          success: loginRes => {
            // 模拟获取openid
            const openid = 'mock_openid_' + Date.now()
            
            userInfo.openid = openid
            this.globalData.userInfo = userInfo
            wx.setStorageSync('userInfo', userInfo)
            wx.setStorageSync('token', 'mock_token')
            
            callback && callback(userInfo)
          },
          fail: err => {
            console.error('wx.login失败', err)
            this.emit('loginFail', '登录失败，请重试')
          }
        })
      },
      fail: err => {
        console.error('用户拒绝授权', err)
        this.emit('loginFail', '需要授权才能使用完整功能')
      }
    })
  },
  
  // 简单事件发射器
  events: {},
  on(event, callback) {
    this.events[event] = callback
  },
  emit(event, data) {
    if (this.events[event]) {
      this.events[event](data)
    }
  }
})